#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
PyInstaller打包脚本
确保中文编码正确，避免乱码问题
"""

import os
import sys
import subprocess
import shutil

def build_exe():
    """使用PyInstaller打包exe文件"""
    
    # 清理之前的构建文件
    if os.path.exists("build"):
        shutil.rmtree("build")
    if os.path.exists("dist"):
        shutil.rmtree("dist")
    if os.path.exists("file_filter.spec"):
        os.remove("file_filter.spec")
    
    # PyInstaller命令参数
    cmd = [
        "pyinstaller",
        "--onefile",                    # 打包成单个exe文件
        "--windowed",                   # 不显示控制台窗口
        "--name=文件筛选工具",           # 设置exe文件名
        "--add-data=file_filter.py;.",  # 添加主程序文件
        "--hidden-import=tkinter",      # 确保tkinter被包含
        "--hidden-import=tkinter.filedialog",
        "--hidden-import=tkinter.messagebox",
        "--hidden-import=tkinter.ttk",
        "--hidden-import=pathlib",
        "--hidden-import=threading",
        "--hidden-import=os",
        "--hidden-import=shutil",
        "--clean",                      # 清理临时文件
        "--noconfirm",                  # 不询问确认
        "file_filter.py"                # 主程序文件
    ]
    
    # 设置环境变量，确保中文编码正确
    env = os.environ.copy()
    env['PYTHONIOENCODING'] = 'utf-8'
    env['PYTHONUTF8'] = '1'
    
    print("开始打包exe文件...")
    print("命令:", " ".join(cmd))
    
    try:
        # 执行PyInstaller命令
        result = subprocess.run(cmd, env=env, capture_output=True, text=True, encoding='utf-8')
        
        if result.returncode == 0:
            print("打包成功！")
            print("exe文件位置: dist/文件筛选工具.exe")
            
            # 检查生成的文件
            exe_path = "dist/文件筛选工具.exe"
            if os.path.exists(exe_path):
                file_size = os.path.getsize(exe_path) / (1024 * 1024)  # MB
                print(f"exe文件大小: {file_size:.2f} MB")
            else:
                print("警告: 未找到生成的exe文件")
        else:
            print("打包失败！")
            print("错误输出:", result.stderr)
            return False
            
    except Exception as e:
        print(f"打包过程中出现错误: {e}")
        return False
    
    return True

def main():
    """主函数"""
    print("=" * 50)
    print("文件筛选工具 - PyInstaller打包脚本")
    print("=" * 50)
    
    # 检查是否安装了PyInstaller
    try:
        import PyInstaller
        print(f"PyInstaller版本: {PyInstaller.__version__}")
    except ImportError:
        print("错误: 未安装PyInstaller")
        print("请运行: pip install pyinstaller")
        return
    
    # 检查主程序文件是否存在
    if not os.path.exists("file_filter.py"):
        print("错误: 未找到file_filter.py文件")
        return
    
    # 开始打包
    if build_exe():
        print("\n打包完成！")
        print("您可以在dist文件夹中找到生成的exe文件")
    else:
        print("\n打包失败！请检查错误信息")

if __name__ == "__main__":
    main() 